#include <QtGui>
#include "concreteDialog.h"

ConcreteDialog::ConcreteDialog(QWidget *parent) : QTableWidget(parent) {

//Кодек для руссификации
  russianCodec = QTextCodec::codecForName("UTF-8");
  QTextCodec::setCodecForTr(russianCodec);
  QTextCodec::setCodecForCStrings(russianCodec);

//Установки для окна
  this->setWindowTitle(tr("Коэффициент шереховатости"));
  this->setFixedSize(WCONCRETE, HCONCRETE);
  // this->resize(WCONCRETE, HCONCRETE);

  this->verticalHeader()->hide();
  this->horizontalHeader()->setEnabled(false);
  this->setColumnCount(2);
  this->setRowCount(5);

  //Задает имена колонкам в таблице переменных
  nameColumn = new QTableWidgetItem();
  nameColumn->setText(tr("Облицовка"));
  nameColumn->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
  this->setHorizontalHeaderItem(0, nameColumn);

  nameColumn = new QTableWidgetItem();
  nameColumn->setText(tr("Коэффициент"));
  nameColumn->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
  this->setHorizontalHeaderItem(1, nameColumn);

  this->setColumnWidth(0, WCONCRETE-120);
  this->setColumnWidth(1, 110);

  curSelRow = -1;

  for (int i=0; i < MAXITEMS; i++)
    for (int j=0; j < MAXITEMS; j++)
      items[i][j] = NULL;

//СОЗДАНИЕ ЭЛЕМЕНТОВ

//1
  createItem(0, 0, tr("Бетонная хорошо отделанная"), false);
  createItem(0, 1, "0.012 - 0.014", true);

  this->setRowHeight(0, 25);

//2
  createItem(1, 0, tr("Бетонная грубая"), false);
  createItem(1, 1, "0.015 - 0.017", true);

  this->setRowHeight(1, 25);

//3
  createItem(2, 0, tr("Сборные железобетонные лотки"), false);
  createItem(2, 1, "0.012 - 0.015", true);

  this->setRowHeight(2, 25);

//4
  createItem(3, 0, tr("Покрытия из асфальтобитумных материалов"), false);
  createItem(3, 1, "0.013 - 0.016", true);

  this->setRowHeight(3, 25);

//5
  createItem(4, 0, tr("Одернованное русло"), false);
  createItem(4, 1, "0.030 - 0.035", true);

  this->setRowHeight(4, 25);

  connect(this, SIGNAL(cellClicked(int, int)), this, SLOT(selectCell(int, int)));
  connect(this, SIGNAL(cellActivated(int, int)), this, SLOT(selectCellAndClose(int, int)));

} //ConcreteDialog::ConcreteDialog(QWidget *parent) : QWidget(parent)

bool ConcreteDialog::createItem(int row, int column, const QString & str, bool center) {

  if ((row < MAXITEMS) && (column < MAXITEMS)) {

    item = new QLabel();
    item->setAutoFillBackground(true);
    item->setText(str);
    item->setIndent(ITEMINDENT);
    if (center)
      item->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    this->setCellWidget(row, column, item);
    items[row][column] = item;
    setDefColor(row, column);

    return true;
    
  } //if ((row < MAXITEMS) && (column < MAXITEMS))

  else {

    return false;

  } //else: if ((row < MAXITEMS) && (column < MAXITEMS))

} //bool ConcreteDialog::createItem(int row, int column, const QString & str, bool center)

void ConcreteDialog::selectCell(int row, int ) {

  int red   = 200;
  int green = 200;
  int blue  = 230;

  resetSel();
  setColor(QColor(red, green, blue), row, 0);
  setColor(QColor(red, green, blue), row, 1);
  emit selectClass(row+1);

  curSelRow = row;

} //void ConcreteDialog::selectCell(int row, int column)

void ConcreteDialog::selectCellAndClose(int row, int ) {

  selectCell(row, 0);

  this->close();

} //void ConcreteDialog::selectCellAndClose(int row, int column)

void ConcreteDialog::setColor(const QColor & color, int row, int column) {

  palette.setColor(QPalette::Base, color); 
  items[row][column]->setPalette(palette);

} //void ConcreteDialog::setColor(const QColor & color, int num)

void ConcreteDialog::setDefColor(int row, int column) {

  if (row % 2 == 0)
    setColor(QColor(240, 240, 240), row, column);
  else
    setColor(QColor(230, 230, 230), row, column);

} //void ConcreteDialog::setDefColor(int num)

void ConcreteDialog::resetSel() {

  for (int i=0; i < MAXITEMS; i++)
    for (int j=0; j < MAXITEMS; j++)
      if (items[i][j] != NULL)
	setDefColor(i, j);

} //void ConcreteDialog::resetSel()

void ConcreteDialog::keyPressEvent(QKeyEvent * event) {

  if (event->key() == Qt::Key_Up) {
  
    if (curSelRow > 0)
      selectCell(curSelRow-1, 0);
    else
      selectCell(0, 0);

  } //if (event->key() == Qt::Key_Up)  

  else if (event->key() == Qt::Key_Down) {

    if (curSelRow < 4)
      selectCell(curSelRow+1, 0);

  } //else if (event->key() == Qt::Key_Down)

  else if (event->key() == Qt::Key_Return) {

    if (curSelRow != -1)
      selectCellAndClose(curSelRow, 0);

  } //else if (event->key() == Qt::Key_Return)

  else if (event->key() == Qt::Key_Escape) {

    this->hide();

  } //else if (event->key() == Qt::Key_Return)

} //void ConcreteDialog::keyPressEvent(QKeyEvent * event)
